import 'package:flutter/material.dart';
//使用外部包
import 'package:english_words/english_words.dart';

/*
 * Stateless widgets 是不可变的, 这意味着它们的属性不能改变 - 所有的值都是最终的,实现至少需要两个类
 * 1.一个StatefulWidget类
 * 2.一个State类,StateFulWidget类本身是不变的,但是State类在生命周期始终存在
 */

class RandomWords extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => new RandomWordsState();
}

class RandomWordsState extends State<RandomWords> {
  // 变量以下划线(_)开头会强制变成私有的
  final _suggestions = <WordPair>[];
  // 添加一个集合对存储用户喜欢的单词对
  final _saved = new Set<WordPair>();

  final _biggerFont = const TextStyle(fontSize: 18.0);
  @override
  Widget build(BuildContext context) {
    // final wordPair=new WordPair.random();
    // return new Text(wordPair.asPascalCase);
    return new Scaffold(
      appBar: new AppBar(
        title: new Text('无限滚动的列表'),
        actions: <Widget>[
          new IconButton(icon:new Icon(Icons.list),onPressed:_pushSaved)
        ],
      ),
      body: _buildSuggestions(),
    );
  }

// 添加语法
  Widget _buildSuggestions() {
    return new ListView.builder(
        padding: const EdgeInsets.all(16.0),
        // 对于每个建议的单词都会调用一次itemBuilder,然后将单词对添加到listTile行中
        //在偶数行,该函数为单词对添加一个ListTile row
        //在奇数行,该行书湖中添一个分割线widget,来分割相邻的词对
        //注意在小屏幕上,分割线看起来比较吃力
        itemBuilder: (content, i) {
          // 在每一列钱添加一个1像素的分割线widget
          if (i.isOdd) return new Divider();
          // 语法"i~/2"表示i除以2,但是返回值是整形(向下取值),比如i为:1,2,3,4,5时,结果为0,1,1,2,2,这样可以计算出ListView中减去分割线后的实际单词对数量
          final index = i ~/ 2;
          //如果是建议列表中的最后一个单词
          if (index >= _suggestions.length) {
            //接着生层10个单词对,然后添加到建议列表
            _suggestions.addAll(generateWordPairs().take(10));
          }
          return _buildRow(_suggestions[index]);
        });
  }

// 行内容
  Widget _buildRow(WordPair pair) {
    final alreadySaved = _saved.contains(pair);
    return new ListTile(
        title: new Text(
          pair.asPascalCase,
          style: _biggerFont,
        ),
        trailing: new Icon(
          alreadySaved ? Icons.favorite : Icons.favorite_border,
          color: alreadySaved ? Colors.red : null,
        ),
        onTap: () {
          setState(() {
            if (alreadySaved) {
              _saved.remove(pair);
              print(pair);
            } else {
              _saved.add(pair);
            }
          });
        });
  }
  // 菜单按钮方法
  void _pushSaved(){
    Navigator.of(context).push(
        new MaterialPageRoute(
          builder:(context){
            final tiles=_saved.map(
              (pair){
                return new ListTile(
                  title: new Text(
                    pair.asCamelCase,
                    style:_biggerFont,
                  ),
                );
              }
            );
            final divided=ListTile
            .divideTiles(
              context:context,
              tiles:tiles,
            )
            .toList();
            return new Scaffold(
              appBar: new AppBar(
                title:new Text('保存爱好'),
              ),
              body:new ListView(children:divided)
            );
          }
        )
    );
  }
}
